const { studentsModel } = require('../models/studentsModel')

module.exports.createStudents = async function (req, res) {
    try {
        const data = req.body;
        const result = await studentsModel.create(data);
        res.send({
            message: '学生数据新增成功',
            code: 1
        })
    } catch (error) {
        console.log('服务器错误', error);
        res.send({
            message: '学生数据新增失败',
            code: 0
        })
    }
}
// 获取学生
module.exports.getStudents = async function (req, res) {
    // 1. 获取前端发送的数据
    const { pageSize, currentPage, type = 'name', value = '' } = req.query;

    // 2. 获取学生的总条数（- 获取所有学生； -获取满足搜索条件的学生）
    const total = await studentsModel.countDocuments({ [type]: { $regex: value, $options: '$i' } });
    // 计算总页数
    let pages = 1; // 默认获取所有数据（只有1页）
    if(pageSize) { // pageSize 有值，则表示用户需要分页获取数据
        pages = Math.ceil(total / pageSize);  // 计算总页数
    }
    // 获取学生数据（包含分页和搜索）
    const result = await studentsModel
        .find({ [type]: { $regex: value, $options: '$i' } })
        .populate('subjectsId classesId')
        .limit(pageSize - 0)  // 请求的数据条数
        .skip((currentPage - 1) * pageSize) // 跳过的数据条数

    res.send({
        message: '学生数据获取成功',
        code: 1,
        result: { total, pages, rows: result }
    })
}

module.exports.deleteStudents = async (req, res) => {
    const data = req.body;
    const result = await studentsModel.deleteOne(data);
    if (result.deletedCount > 0) {
        res.send({
            code: 1,
            message: '学生删除成功'
        })
    } else {
        res.send({
            code: 0,
            message: '学生删除失败，请检查删除条件'
        })
    }
}

module.exports.getStudentsById = async (req, res) => {
    const data = req.query;
    const result = await studentsModel.find(data);
    if (result.length > 0) {
        res.send({
            code: 1,
            message: '学生信息获取成功',
            result: result[0]
        })
    } else {
        res.send({
            code: 0,
            message: '根据 _id 获取学生信息失败，请检查 _id'
        })
    }
}